#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QLabel>
#include "sessionfriendarea.h"
#include "messageshowarea.h"
#include "messageeditarea.h"
#include "userinfowidget.h"
#include "selfinfowidget.h"
#include "sessiondetailwidget.h"
#include "groupsessiondetailwidget.h"
#include "addfrienddialog.h"
#include "model/data.h"
#include "debug.h"
#include "toast.h"
#include "model/datacenter.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    static MainWidget* getInstance();
    ~MainWidget();

    ////////////////////////////////////////////////////////////
    /// 网络相关逻辑
    ////////////////////////////////////////////////////////////
    //加载会话最近消息
    void loadRecentMessage(const QString& chatSessionId);
    //通过userid 加载会话最近消息并选中该会话
    void switchSession(const QString& userId);
    //获取消息展示区域
    MessageShowArea* getMessageShowArea(){return messageShowArea;}

private:
    static MainWidget* instance;
    Ui::MainWidget *ui;
    MainWidget(QWidget *parent = nullptr);

    //左中右widget
    QWidget* leftWidget;
    QWidget* midWidget;
    QWidget* rightWidget;

    //初始化widget函数
    void initUI();
    void initMainWindow();
    void initWindowLeft();
    void initWindowMid();
    void initWindowRight();

    //特定控件初始化
    void initWindowRightOfTitle(QWidget* titleWidget);

    //初始化信号槽函数
    void initSignalSlot();

    //初始化websocket
    void initWebsocket();

    /////////////////////////////////////////////////////////
    /// 左部窗口相关
    /////////////////////////////////////////////////////////
    //用户头像按钮, tab切换按钮
    QPushButton* userBtn;
    QPushButton* sessionTabBtn;
    QPushButton* friendTabBtn;
    QPushButton* applyTabBtn;

    //tab标识
    enum ActiveTab
    {
        SESSION_LIST = 1,
        FRIEND_LIST,
        APPLY_LIST
    };

    //当前页标识
    ActiveTab activeTab = SESSION_LIST;

    //页面切换加载逻辑
    void loadSessionList();
    void loadFriendList();
    void loadApplyList();

    //切换会话函数
    void switchTabToSession();
    void switchTabToFriend();
    void switchTabToApply();

    /////////////////////////////////////////////////////////
    /// 中部窗口相关
    /////////////////////////////////////////////////////////
    QLineEdit* searchEdit;  //搜索框
    QPushButton* addBtn;    //添加联系人以创建群聊会话
    SessionFriendArea* sessionFriendArea; //好友会话列表

    /////////////////////////////////////////////////////////
    /// 右部窗口相关
    /////////////////////////////////////////////////////////
    // 会话标题
    QLabel* sessionTitle;
    // 消息展示区域
    MessageShowArea* messageShowArea;
    // 消息编辑区域
    MessageEditArea* messageEditArea;
    // 会话详情按钮
    QPushButton* sessionDetailsBtn;

    /////////////////////////////////////////////////////////
    /// 加载数据相关
    /////////////////////////////////////////////////////////
    void updateFriendList();
    void updateChatSessionList();
    void updateApplyList();
    void updateRecentMessage(const QString& chatSessionId);


};
#endif // MAINWIDGET_H
